package cn.tedu.springmvc.exception;

import cn.tedu.springmvc.response.JsonResult;
import cn.tedu.springmvc.response.StatusCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@Slf4j
/*
 @Slf4j是Lombok提供的一种注解，
 * 主要用于在类中自动生成一个名为log的日志对象。
 * 可以方便地在代码中使用日志功能，
 * 而无需手动创建和初始化日志对象。
 * 在类上添加了@Slf4j注解之后，就可以直接在代码中使用log对象进行日志输出，
 * 例如调用log.debug()、log.info()等方法。
 */
@RestControllerAdvice
/**
 * @RestControllerAdvice
 * 声明全局异常处理类
 * 如果控制器代码在执行过程中，异常报错，会被当前类自动捕获处理
 */
public class GlobalExceptionHandler {

    /**
     * @ExceptionHandler注解
     * 声明全局处理异常类中的方法
     * 作用：该方法用于处理什么类型的异常
     * @return
     */
    @ExceptionHandler(IllegalArgumentException.class)
    public JsonResult doHandleIllegalArgumentException(IllegalArgumentException e){
        log.debug("参数校验失败-{}",e.getMessage());
       return new JsonResult(StatusCode.VALIDATE_ERROR);
//        return new JsonResult(5002,"c参数处理失败",null);
    }
    @ExceptionHandler(Exception.class)
    public JsonResult handleException(Exception e){
        log.debug("Exception异常-{}",e.getMessage());
        return new JsonResult(StatusCode.OPERATION_FAILED);
    }
    @ExceptionHandler(Throwable.class)
    public JsonResult handleThrowable(Throwable e){
        log.debug("Throwable异常-{}",e.getMessage());
        return new JsonResult(StatusCode.OPERATION_FAILED);
    }
    /**
     * 可以自定义多个 异常处理方法
     */
}
